package com.atguigu.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * Created by Smexy on 2023/3/20
 * <p>
 * 连接池：  存放连接的池子(容器，集合)。
 * 好处： 省去频繁地创建连接，关闭连接带来的时间或性能的开销。
 * 连接可以复用。
 */
public class JedisPoolConfigDemo
{
    public static void main(String[] args) {
        //创建一个连接池的配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //设置池子的极限容量
        jedisPoolConfig.setMaxTotal(20);
        //设置池中中空闲连接的个数为 5-10个
        jedisPoolConfig.setMinIdle(5);
        jedisPoolConfig.setMaxIdle(10);

        //当前池子连接耗尽，客户端请求时，是否阻塞。 true：阻塞 false：返回异常
        jedisPoolConfig.setBlockWhenExhausted(true);
        // 客户端阻塞等待的最大时长
        jedisPoolConfig.setMaxWaitMillis(60000);
        // 在借连接和归还连接时，是否要对连接进行测试(ping)。
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPoolConfig.setTestOnReturn(true);

        //基于配置创建一个连接池
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "hadoop103", 6379);

        //从池子中借一个连接
        Jedis jedis = jedisPool.getResource();

        //后续使用
        System.out.println(jedis.ping());

        jedis.close();

    }
}
